perm filename ZREAD[MUS,LCS] blob
sn#319832 filedate 1977-12-02 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 EXTERNAL FUNCTION GETINF(ARRAY J,INSR,INBT,INCH,INMX,INDR),
C00009 ENDMK
C⊗;
EXTERNAL FUNCTION GETINF(ARRAY J,INSR,INBT,INCH,INMX,INDR),
RDSMPL(ARRAY N,BITS),GETIN2(ARRAY J,INSR,INBT,INCH,INMX,INDR),
RDSMP2(ARRAY N,BITS),GETIN3(ARRAY J,INSR,INBT,INCH,INMX,INDR),
RDSMP3(ARRAY N,BITS),GETIN4(ARRAY J,INSR,INBT,INCH,INMX,INDR),
RDSMP4(ARRAY N,BITS);
ARRAY INF, IN2, IN3, IN4(1536);
VARIABLE /CNT,/RD,/SCNT,INCH,INSR,INMX,INDR,INBT,INBUF,
/CNT2,/RD2,/SCNT2,INCH2,INSR2,INDR2,INBT2,INBUF2,
/CNT3,/RD3,/SCNT3,INCH3,INSR3,INDR3,INBT3,INBUF3,
/CNT4,/RD4,/SCNT4,INCH4,INSR4,INDR4,INBT4,INBUF4;
FUNCTION PRNTIT(N,CNT,INF,INR,INB,INC,IND,INBUF);
BEGIN VARIABLE DUR,INSR,INBT,INCH,INDR;
IF N = 1 THEN BEGIN GETINF(INF1,INSR1,INBT1,INCH1,INMX,INDR1);
INR←INSR1; INB←INB1; INC←INC1; IND←INDR1; INF←INF1;
PRINT "****READING ",INFILE,".SND****"; END;
IF N = 2 THEN BEGIN GETIN2(INF2,INSR2,INBT2,INCH2,INMX,INDR2);
INR←INSR2; INB←INB2; INC←INC2; IND←INDR2; INF←INF2;
PRINT "****READING ",INFIL2,".SND****"; END;
IF N = 3 THEN BEGIN GETIN3(INF3,INSR3,INBT3,INCH3,INMX,INDR3);
INR←INSR3; INB←INB3; INC←INC3; IND←INDR3; INF←INF3;
PRINT "****READING ",INFIL3,".SND****"; END;
IF N = 4 THEN BEGIN GETIN4(INF4,INSR4,INBT4,INCH4,INMX,INDR4);
INR←INSR4; INB←INB4; INC←INC4; IND←INDR4; INF←INF4;
PRINT "****READING ",INFIL4,".SND****"; END;
INBUF←1536-512*INB; DUR←IND/INR/INC;
PRINT "SRATE=",INR," BITS=",12+INB*6," NCHNS=",INC,
" MAXAMP=",INMX," DUR=",DUR;
CNT←INBUF;
END;
FUNCTION GETVAR(N,INDR,INBUF); BEGIN
IF N =1 THEN BEGIN INF←INF1; INDR←INDR1; INBUF←INB1; END;
IF N =2 THEN BEGIN INDR←INDR2; INBUF←INB2; END;
IF N =3 THEN BEGIN INDR←INDR3; INBUF←INB3; END;
IF N =4 THEN BEGIN INDR←INDR4; INBUF←INB4; END;
END;
FUNCTION RDSMP(N,RD); BEGIN
IF N =1 THEN BEGIN
FUNCTION READIN(RD,N,SCNT,INC);
BEGIN <***** DON'T FORGET TO INIT SCNT ← 0;
IF SCNT=0 THEN BEGIN <****** READ HEADER INTO ARRAY INF.
PRNTIT(N,CNT,INF,INSR,INBT,INCH,INDR,INBUF);
ELSE GETVAR(INF,INDR,INBUF,INBT); END;
SCNT←SCNT+1; < ***** UPDATE THE COUNTER
IF SCNT > INDR THEN BEGIN <***CHECK IF SMPL CNT IS EXCEEDED
RD←0; RETURN(RD); END;
IF CNT > INBUF THEN BEGIN
RDSMP(N,INF,INBT); <**** GET A NEW BUFFER WHEN NECESSARY
CNT←0; END;
RD←INF(CNT); <**** PUT VALUE OF SAMPLE INTO RD
CNT←CNT+1; <**** UPDATE THE COUNTER
RETURN(RD); END; <**** VALUE OF RD IS RETURNED IN READIN(RD)
END;
<**** instrument definitions.
SEG(F6);0 0 .7 20 .5 50 1 80 0 100; <ENVELOPE ON INPUT SOUND.
INSTRUMENT READA; <**** A POSSIBLE READIN INSTRUMENT.
OSCIL(P4,MAG/P2,F6);
OUTA←OUTA+U1*READIN(RD);
END;
INSTRUMENT READB;
OSCIL(P4,MAG/P2,F6);
OUTA←OUTA+U1*READI2(RD2);
END;
INSTRUMENT READC;
OSCIL(P4,MAG/P2,F6);
OUTA←OUTA+U1*READI3(RD3);
END;
INSTRUMENT READD;
OSCIL(P4,MAG/P2,F6);
OUTA←OUTA+U1*READI4(RD4);
END;
OUTFILE←"RD.SND"; <**** the extension must appear here.
PLAY;
READA 0 .37 0 2; <*** amplitude will be doubled
INFILE←"CL"; <FILE NAME TO BE READ IN FOR NOTE ABOVE THIS LINE!!!
SCNT←0; <initialize counter file above.
READB .3 .37 0 1; <**** amplitude will be unchanged
INFIL2←"TO"; <FILE NAME TO BE READ IN. (.SND extension assumed.)
SCNT2←0; < intitialize the counter
READC .8 .37 0 .7; <**** note the amplitude
INFIL3←"CL"; <FILE NAME TO BE READ IN.
SCNT3←0;
READD 1.3 .4 0 1.8; SCNT4←0; <*** use READD
INFIL4←"TO"; <FILE NAME TO BE READ IN FOR NOTE ABOVE THIS LINE!!!
FINI;